package com.linkoog.devtools.code_generator.template.loader;

import com.linkoog.devtools.code_generator.template.loader.file.ClasspathDirTemplateLoader;
import com.linkoog.devtools.code_generator.template.loader.file.FileDirTemplateLoader;
import com.linkoog.devtools.code_generator.template.loader.zip.ClasspathZipTemplateLoader;
import com.linkoog.devtools.code_generator.template.loader.zip.FileZipTemplateLoader;
import com.linkoog.devtools.code_generator.template.model.node.TemplateNodeData;
import com.linkoog.devtools.code_generator.template.render.engine.TemplateType;
import org.jetbrains.annotations.NotNull;

public class TemplateResourceLoader {

    private static final ClasspathZipTemplateLoader classpathZipTemplateLoader = new ClasspathZipTemplateLoader();
    private static final ClasspathDirTemplateLoader classpathDirTemplateLoader = new ClasspathDirTemplateLoader();
    private static final FileZipTemplateLoader fileZipTemplateLoader = new FileZipTemplateLoader();
    private static final FileDirTemplateLoader fileDirTemplateLoader = new FileDirTemplateLoader();



    public static TemplateNodeData loadTemplate(@NotNull TemplateType templateEngineType, @NotNull String templateName, @NotNull String resourcePath) {
        if (resourcePath.startsWith("classpath:")){
            String resource = resourcePath.substring("classpath:".length());
            if (resource.endsWith(".zip")){
                return classpathZipTemplateLoader.loadTemplate(templateEngineType, templateName,resource);
            } else {
                return classpathDirTemplateLoader.loadTemplate(templateEngineType, templateName,resource);
            }
        } else if (resourcePath.startsWith("file:")){
            String resource = resourcePath.substring("file:".length());
            if (resource.endsWith(".zip")){
                return fileZipTemplateLoader.loadTemplate(templateEngineType, templateName,resource);
            } else {
                return fileDirTemplateLoader.loadTemplate(templateEngineType, templateName, resource);
            }
        }

        return null;
    }

}
